/*
 * sample_current.h
 *
 *  Created on: Nov 25, 2024
 *      Author: Vinson
 */

#ifndef INC_SAMPLE_CURRENT_H_
#define INC_SAMPLE_CURRENT_H_

typedef enum _ADC_TYPE{
      ADC_GET_AB,
	  ADC_GET_AC,
	  ADC_GET_BA,
	  ADC_GET_BC,
	  ADC_GET_CA,
	  ADC_GET_CB
} ADC_TYPE;

#define _ADC_VOLTAGE				3.3f       								/* ADC 电压 */
#define _ADC_RESOLUTION				4095.0f         						/* ADC 分辨率, ADC_RESOLUTION_12B */
#define _ADC_CONV 					((_ADC_VOLTAGE) / (_ADC_RESOLUTION)) 	/* ADC 计数道电压转换比率求解 */

#define _ADC_AMP_GAIN 				20 										/* 放大器增益 */
#define _ADC_SHUNT_RESISTOR_VAL 	(0.02f) 								/* 采样电阻阻值 */

/* 伏安比 */
#define _ADC_VOLTS_TO_AMPS_RATIO 	(1.0f / _ADC_SHUNT_RESISTOR_VAL / _ADC_AMP_GAIN) /* 伏安比 */
/* ADC 增益 */
#define _ADC_GAIN 					(_ADC_VOLTS_TO_AMPS_RATIO * 1)

typedef struct _current_sense {

	ADC_TYPE adc_type;  // adc 检测类型
	float offset_ch1; 	// adc_ch1 零偏移量
	float offset_ch2; 	// adc_ch2 零偏移量
	float ia;  			// a 相 电流值
	float ib;  			// b 相 电流值
	float ic;			// c 相电流
} current_sense_t;

void adc_current_init();
void adc_current_dir_set(ADC_TYPE type);
void adc_get_phaseCurrent(float *ia, float *ib);

#endif /* INC_SAMPLE_CURRENT_H_ */
